import 'dart:convert';
import 'package:flutter/foundation.dart';
import 'package:shared_preferences/shared_preferences.dart';
import '../models/todo.dart';

class TodoProvider with ChangeNotifier {
  List<Todo> _todos = [];
  final String _storageKey = 'todos';
  late SharedPreferences _prefs;

  List<Todo> get todos => _todos;

  TodoProvider() {
    _initPrefs();
  }

  Future<void> _initPrefs() async {
    _prefs = await SharedPreferences.getInstance();
    _loadTodos();
  }

  void _loadTodos() {
    final String? todosString = _prefs.getString(_storageKey);
    if (todosString != null) {
      final List<dynamic> decodedTodos = jsonDecode(todosString);
      _todos = decodedTodos.map((item) => Todo.fromJson(item)).toList();
      notifyListeners();
    }
  }

  Future<void> _saveTodos() async {
    final String encodedTodos = jsonEncode(_todos.map((todo) => todo.toJson()).toList());
    await _prefs.setString(_storageKey, encodedTodos);
  }

  void addTodo(String title) {
    final todo = Todo(
      id: DateTime.now().toString(),
      title: title,
    );
    _todos.add(todo);
    _saveTodos();
    notifyListeners();
  }

  void toggleTodo(String id) {
    final todoIndex = _todos.indexWhere((todo) => todo.id == id);
    if (todoIndex != -1) {
      _todos[todoIndex] = _todos[todoIndex].copyWith(
        isCompleted: !_todos[todoIndex].isCompleted,
      );
      _saveTodos();
      notifyListeners();
    }
  }

  void updateTodo(String id, String title) {
    final todoIndex = _todos.indexWhere((todo) => todo.id == id);
    if (todoIndex != -1) {
      _todos[todoIndex] = _todos[todoIndex].copyWith(
        title: title,
      );
      _saveTodos();
      notifyListeners();
    }
  }

  void deleteTodo(String id) {
    _todos.removeWhere((todo) => todo.id == id);
    _saveTodos();
    notifyListeners();
  }
}